# 过滤器: 函数   1> 参数接收模板变量  2> 需要将转换的结果返回
import functools

from flask import session, current_app, g

from info.models import User


def func_index_convert(value):  # value = 1
    index_dict = {1: "first", 2: "second", 3: "third"}
    return index_dict.get(value, "")


# 获取用户的信息
def user_login_data(f):  # f = news_detail

    @functools.wraps(f)  # 该装饰器可以让闭包函数使用指定函数的函数信息(函数名, 函数文档注释)
    def wrapper(*args, **kwargs):
        # 判断用户是否登录  取出session中的user_id
        user_id = session.get("user_id")
        user = None  # type: User
        if user_id:  # 已登录
            # 查询用户数据
            try:
               user = User.query.get(user_id)
            except BaseException as e:
                current_app.logger.error(e)

        # 将用户信息保存到g变量
        g.user = user
        # print(wrapper.__name__)  # 获取函数名
        return f(*args, **kwargs)

    return wrapper


def file_upload(data):
    """
    上传文件到七牛云
    :param data: 上传的数据
    :return: 生成随机文件名
    """

    import qiniu
    access_key = "kJ8wVO7lmFGsdvtI5M7eQDEJ1eT3Vrygb4SmR00E"
    secret_key = "rGwHyAvnlLK7rU4htRpNYzpuz0OHJKzX2O1LWTNl"
    bucket_name = "infonews"  # 存储空间名称

    q = qiniu.Auth(access_key, secret_key)
    key = None  # 设置文件名, 如果为None则生成随机文件名
    token = q.upload_token(bucket_name)
    # 上传文件
    ret, info = qiniu.put_data(token, key, data)
    if ret is not None:  # 上传成功
        return ret.get("key")  # 取出随机的文件名
    else:
        raise BaseException(info) # error message in info